#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void GetMemory(char* p) {
	p = (char*)malloc(100);
}

void Test() {
	char* str = NULL;
	GetMemory(str);
	strcpy(str, "hello world");
	printf(str);
}

int main() {
	Test();

	return 0;
}


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// ↓ 修改返回类型为char*
char* GetMemory(char* p) {
	p = (char*)malloc(100);
	return p; // 将p带回来
}

void Test() {
	char* str = NULL;
	str = GetMemory(str); // 用str接收，此时str指向刚才开辟的空间
	strcpy(str, "hello world"); // 此时copy就没有问题了
	printf(str);
	// 用完之后记得free，就可以解决内存泄露问题
	free(str);
	str = NULL; // 还要将str置为空指针
}

int main() {
	Test();

	return 0;
}


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//              ↓ 用char**接收
void GetMemory(char** p) {
	*p = (char*)malloc(100);
}


#include <stdio.h>
#include <stdlib.h>

char* GetMemory(void) {
	char p[] = "hello world";
	return p;
}

void Test(void) {
	char* str = NULL;
	str = GetMemory();
	printf(str);
}

int main() {
	Test();

	return 0;
}
void Test() {
	char* str = NULL;
	GetMemory(&str); // 址传递，就可以得到地址
	strcpy(str, "hello world");
	printf(str);
	// 记得free，就可以解决内存泄露问题
	free(str);
	str = NULL; // 还要将str置为空指针
}

int main() {
	Test();

	return 0;
}

#include <stdio.h>
#include <stdlib.h>

void GetMemory(char** p, int num) {
	*p = (char*)malloc(num);
}

void Test(void) {
	char* str = NULL;
	GetMemory(&str, 100);
	strcpy(str, "hello");
	printf(str);
}

int main() {
	Test();

	return 0;
}


#include <stdio.h>
#include <stdlib.h>

void GetMemory(char** p, int num) {
	*p = (char*)malloc(num);
}

void Test(void) {
	char* str = NULL;
	GetMemory(&str, 100);
	strcpy(str, "hello");
	printf(str);

	// 释放并置空
	free(str);
	str = NULL;
}

int main() {
	Test();

	return 0;
}


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Test(void) {
	char* str = (char*)malloc(100);
	strcpy(str, "hello");
	free(str);

	if (str != NULL) {
		strcpy(str, "world");
		printf(str);
	}
}

int main() {
	Test();

	return 0;
}


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Test(void) {
	char* str = (char*)malloc(100);
	strcpy(str, "hello");
	free(str);
	str = NULL; // 置空

	if (str != NULL) {
		strcpy(str, "world");
		printf(str);
	}
}

int main() {
	Test();

	return 0;
}